/* lista.c -- Codigo Fuente para el modulo de lista.c
   Copyright (C) 2013 Alejandro L. Baldres, Diego Marfil

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.*/

#include <ncurses.h>
#include <strings.h>
#include <stdlib.h>

int main()
{	
	/* Declaramos */
	int ch, i;
	int j;
	int cant_resultados;
	char titulo[100];
	int cont_titulo;
	char pt_encontrados[3][100];
	char mesg[3][80] = {"Hay poder    ","Nadie como tu  ", "Aleluya      "};
	char str[25];
	int pos_cursor = 0;

	/* Declaracion de constantes */

	const int START_TXT = 27;

	/* Inicializamos */
	initscr();
	raw();
	keypad(stdscr, TRUE);
	noecho();
	curs_set(0);
	i = START_TXT;
	cont_titulo = 0;

	/*Definicion de colores*/
	if (has_colors()) //Si la consola soporta colores inicio el modo color
		start_color();
	init_pair(1,COLOR_BLACK,COLOR_WHITE);

	/* Ciclo ppal */

	while (i != 99) {
		mvprintw(2, 0, "Type the name of the song: ");
		ch = getch();

		if (ch == KEY_F(12)) { /* Si F12 Salimos */
			mvprintw(LINES - 1, 0, "EXITING...       ");
			i = 99;
		} else if ( ch == KEY_BACKSPACE ) // Si se tecleo backspace...
		{
			if (pos_cursor > 0 ) // Si hay texto que borre, sino que suene la campanilla
			{
				int z = 0;
				cont_titulo = reducir_vector(titulo, pos_cursor, cont_titulo);
				pos_cursor--;
				mvprintw(2,START_TXT,"                                                                                                           ");
				for (z=0;z<pos_cursor;z++)
					mvprintw(2,START_TXT+z,"%c",titulo[z]);
				attrset(COLOR_PAIR(1));
				mvprintw(2,START_TXT+pos_cursor,"%c",titulo[pos_cursor]);
				attroff(COLOR_PAIR(1));
				if (cont_titulo >= pos_cursor) {
					for (z=pos_cursor+1;z<cont_titulo;z++)
						mvprintw(2,27+z,"%c",titulo[z]);
				}

			}
			else { 
				beep();
			}
		}
		else
			if (ch == KEY_LEFT) {// Defino movimiento de cursor de tecla izquierda
				if (pos_cursor > 0)
					pos_cursor--;
				int z;
				mvprintw(2,START_TXT,"                                                                                                           ");
				if (pos_cursor == 0) {
					attrset(COLOR_PAIR(1));
					mvprintw(2, START_TXT, "%c", titulo[0]);
					attroff(COLOR_PAIR(1));
					for (z=1; z < cont_titulo; z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);
				}
				else {
					for (z=0;z<pos_cursor;z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);
					attrset(COLOR_PAIR(1));
					mvprintw(2,START_TXT+pos_cursor,"%c",titulo[pos_cursor]);
					attroff(COLOR_PAIR(1));
					if (cont_titulo >= pos_cursor) {
						for (z=pos_cursor+1;z<cont_titulo;z++)
							mvprintw(2,27+z,"%c",titulo[z]);
					}
				}
			}
			else if (ch == KEY_RIGHT) {//Defino el movimiento de la tecla derecha
				if (pos_cursor < cont_titulo)
					pos_cursor++;
				int z;
				if (pos_cursor == cont_titulo) {
					for (z=0;z<cont_titulo;z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);
					attrset(COLOR_PAIR(1));
					mvprintw(2,START_TXT+cont_titulo," ");
					attroff(COLOR_PAIR(1));
				}
				else {
					for (z=0;z<pos_cursor;z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);
					attrset(COLOR_PAIR(1));
					mvprintw(2,START_TXT+pos_cursor,"%c",titulo[pos_cursor]);
					attroff(COLOR_PAIR(1));
					if (cont_titulo>=pos_cursor)
						for (z=pos_cursor+1;z<cont_titulo;z++)
							mvprintw(2,START_TXT+z,"%c",titulo[z]);
				}

			}
			else{   // Si se escribe en el final
				if (pos_cursor == cont_titulo){
					titulo[cont_titulo]=ch;
					cont_titulo++;
					pos_cursor++;
					mvprintw(2, START_TXT + cont_titulo -1,"%c", ch);
					attrset(COLOR_PAIR(1));
					mvprintw(2,START_TXT + cont_titulo, " ");
					attroff(COLOR_PAIR(1));
					cant_resultados = busqueda(titulo, cont_titulo, pt_encontrados);
					move(LINES-1, 0);
					deleteln();
					move(LINES-2, 0);
					deleteln();
					move(LINES-3, 0);
					deleteln();
					for (j=cant_resultados; j>0; j--) {
						mvprintw(LINES - j, 0, "%d : %s",j, "lalal");
					}

					++i; 
					i  = (i % 3);
				}
				else { // Si se escribe en el medio
					char buffer_aux[100];
					int z;
					strcpy(buffer_aux,titulo);
					titulo[pos_cursor]=ch;
					for (z=pos_cursor;z<cont_titulo;z++)
						titulo[z+1]=buffer_aux[z];
					cont_titulo++;
					pos_cursor++;
					for (z=0;z<pos_cursor;z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);
					attron(COLOR_PAIR(1));
					mvprintw(2,START_TXT+pos_cursor,"%c",titulo[pos_cursor]);
					attroff(COLOR_PAIR(1));
					for (z=pos_cursor+1;z<cont_titulo;z++)
						mvprintw(2,START_TXT+z,"%c",titulo[z]);

					++i;
					i= (i % 3);

				}

			}
		//		refresh();
	}
//	sleep(1);
	getch();
	endwin();

	return 0;
}
int reducir_vector(char *titulo, int pos_actual, int longitud)
{
	char aux[longitud-1];
	int i, j;

	for (i=0, j=0; i<longitud; i++) {
		if (pos_actual - 1 == i)
			continue;
		aux[j]=titulo[i];
		j++;
	}
	strcpy(titulo, aux);
	titulo[longitud-1]=' ';
	return longitud-1;
}


int busqueda(char *subcadena, int longitud, char encontrados[][100])
{
	int numero = 0;
	int i;

	numero = 3 - (longitud % 3);
	strcpy(encontrados[0], "Hay poder    ");
	mvprintw(LINES- 9, 0, " %s",encontrados[0]);
	strcpy(encontrados[1], "Nadie como tú");
	strcpy(encontrados[2], "Aleluya      ");
	mvprintw(LINES- 10, 0, " %s",encontrados[1]);
	mvprintw(LINES- 11, 0, " %s",encontrados[2]);

	return numero;
}

